package cn.freeprogrammer.igen.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 默认数据库和JAVA类相关名称的相互转换工具.

 * @author minwh
 *
 */
public class DefaultNameResolver implements NameResolver {

	/**
	 * 数据库名到JAVA类名转换规则为：
	 * 大写第一个字母，去除所有下划线'_'，并将下划线后的第一个字母大写，其它所以字母小写.
	 */
	public String entityName(String tableName) {
		String entityName = tableName.toLowerCase();
		StringBuffer sbuf = new StringBuffer();    
		Pattern p = Pattern.compile("_([a-zA-Z])");
		Matcher m = p.matcher(entityName);
		while(m.find()) {
			m.appendReplacement(sbuf, m.group(1).toUpperCase());
		}
		
		m.appendTail(sbuf);
		sbuf.replace(0, 1, sbuf.substring(0, 1).toUpperCase());
		
		return sbuf.toString();
	}


	/**
	 * 数据库字段名到JAVA字段名的转换规则为:
	 * 去除所有下划线'_'，并将下划线后的第一个字母大写，其它所以字母小写.
	 */
	public String fieldName(final String columnName) {
		String fieldName = columnName.toLowerCase();
		StringBuffer sbuf = new StringBuffer();    
		Pattern p = Pattern.compile("_([a-zA-Z])");
		Matcher m = p.matcher(fieldName);
		while(m.find()) {
			m.appendReplacement(sbuf, m.group(1).toUpperCase());
		}
		
		m.appendTail(sbuf);
		
		return sbuf.toString();
	}
	
	public static void main(String[] args) {
		DefaultNameResolver c = new DefaultNameResolver();
		//System.out.println(c.fieldName("LAST_LOGIN"));
		System.out.println(c.entityName("USER_ROLE"));
	}
}
